package cl.tinet.tarea6;

import java.io.Serializable;
import java.util.List;
import java.util.ResourceBundle;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import cl.tinet.tarea6.exception.usuarioExisteExcepcion;
import cl.tinet.tarea6.model.MD5;
import cl.tinet.tarea6.model.Usuario;

@ManagedBean(name = "usuarioBean")
@ViewScoped
public class UsuarioManagedBean implements Serializable {

	private static final long serialVersionUID = 1L;

	private Usuario usuario;

	List<Usuario> resultado;

	public UsuarioManagedBean() {

		if (usuario == null) {
			this.usuario = new Usuario();
		}
	}

	public List<Usuario> getResultado() {
		return resultado;
	}

	public void setResultado(List<Usuario> resultado) {
		this.resultado = resultado;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	/**
	 * Metodo crear usuario
	 * 
	 * @return string con direccion de la pagina de destino
	 */
	public String crearUsuario() {
		//hola
		InitialContext ctx;
		try {
			ctx = new InitialContext();
			UsuarioBean bean = (UsuarioBean) ctx
					.lookup("tarea6-maven-multi-app/UsuarioBeanImpl/local");
			MD5 md5 = new MD5();
			String hash = md5.getMD5(usuario.getPassword());
			usuario.setPassword(hash);

			try {

				bean.crear(this.usuario);

			} catch (usuarioExisteExcepcion e) {
				System.out.println("Error: " + e.getCode());
				// Manejar.
				//FacesContext ctx = FacesContext.getCurrentInstance().get;
				//Setear mensaje:
				String key = e.getCode();
				//archivo de internacionalizacion.
				String mensaje = ResourceBundle.getBundle("mensajes").getString(key);
				//enviar mensaje al growl o a otra cosa.
			}

		} catch (NamingException e) {
			e.printStackTrace();
		}

		return "index";
	}

	/**
	 * Metodo eliminar usuario
	 * 
	 * @return string con direccion de la pagina de destino
	 */
	public String eliminarUsuario() {

		InitialContext ctx;
		try {
			ctx = new InitialContext();
			UsuarioBean bean = (UsuarioBean) ctx
					.lookup("tarea6-maven-multi-app/UsuarioBeanImpl/local");
			bean.eliminar(this.usuario.getUsername());
		} catch (NamingException e) {
			e.printStackTrace();
		}

		return "index";
	}

	/**
	 * Metodo listar usuario
	 * 
	 * @return string con direccion de la pagina de destino
	 */
	public void listarUsuario() {

		InitialContext ctx;
		try {
			ctx = new InitialContext();
			UsuarioBean bean = (UsuarioBean) ctx
					.lookup("tarea6-maven-multi-app/UsuarioBeanImpl/local");
			resultado = bean.lista();
		} catch (NamingException e) {
			e.printStackTrace();
		}
	}

	/**
	 * Metodo buscar Usuario
	 */
	public void buscarUsuario() {

		InitialContext ctx;
		try {
			System.out.println("ENTRA BUSCAR");
			ctx = new InitialContext();
			UsuarioBean bean = (UsuarioBean) ctx
					.lookup("tarea6-maven-multi-app/UsuarioBeanImpl/local");
			usuario = bean.buscarUsername("car.duque");
			System.out.println(resultado.get(0).getUsername());
		} catch (NamingException e) {
			e.printStackTrace();
		}
	}

}
